package pharao.client.views.game.landkarte.ort.basics;

import hmvc4gwt.client.event.IHmvcEvent;
import hmvc4gwt.framework.client.controller.GuiController;
import hmvc4gwt.framework.client.events.AddViewEvent;
import pharao.client.dto.OrtDTO;
import pharao.client.views.events.GetModelDataEvent;
import pharao.client.views.events.SetModelDataEvent;
import pharao.client.views.game.landkarte.ort.basics.events.ShowOrtBasicViewEvent;
import pharao.client.views.game.landkarte.ort.status.OrtStatusController;
import pharao.client.views.game.landkarte.ort.status.OrtStatusModel;
import pharao.client.views.game.landkarte.ort.status.OrtStatusView;
import pharao.client.views.game.landkarte.ort.status.events.ShowOrtStatusViewEvent;

public class OrtBasicsController extends GuiController {

	protected void initImpl() {
		register(ShowOrtBasicViewEvent.class, this);
		register(SetModelDataEvent.class, this);
		
		fireEventLocal(new GetModelDataEvent());
	}

	public void handleEventImpl(IHmvcEvent event) {
		
		if (event instanceof ShowOrtBasicViewEvent) {
			
			fireEvent(new AddViewEvent(getView()), true, false, false);
			
		} else if (event instanceof ShowOrtStatusViewEvent) {
			
			fireEvent(new ShowOrtStatusViewEvent(), false, false, true);
			
		} else if (event instanceof SetModelDataEvent) {
			
			/*
			 * Status-Seite setzen, GetModelData wird von der View gefeuert
			 */
			if (event.getPayload() instanceof OrtDTO) {
				addStatusChild((OrtDTO) event.getPayload());
			}
		}
	}
	
	private void addStatusChild(OrtDTO ortDTO) {
		addChildComponent(new OrtStatusController(), new OrtStatusModel(ortDTO.getOrtStatus()), new OrtStatusView());
	}

	public Class getClassOfObject() {
		return OrtBasicsController.class;
	}

}
